package model1

import (
	"errors"
	"fmt"
)

//高阶函数分为函数作为参数和函数作为返回值两部分。

/*
函数作为参数
函数可以作为参数：
*/

func add1(x, y int) int {
	return x + y
}
func calc1(x, y int, add func(int, int) int) int {
	return add(x, y)
}

func FuncParamIsFunc() {
	a := calc1(1, 2, add1)
	fmt.Printf("a: %v\n", a)
}

/*
函数作为返回值
函数也可以作为返回值：
*/
func Do(s string) (func(int, int) int, error) {
	switch s {
	case "+":
		return add, nil
	case "-":
		return sub, nil
	default:
		err := errors.New("无法辨别的操作符")
		return nil, err
	}
}
